#!/usr/bin/env python
# -*- coding: utf-8 -*-

from GladeConnect import GladeConnect
import gtk
import sys
import dialogos
import debugwindow
import SimpleTree
import ifd
from strSQL.basicas import strSelectTipoDocumento
from psycopg2 import connect
import completion
import comunes

(CODIGO,
 DESCRIPCION) = range(2)

class wnTipoDocumento (GladeConnect):
    def __init__(self, conexion=None, padre=None, root="wnTipoDocumento"):
        GladeConnect.__init__(self, "glade/wnTipoDocumento.glade", root)
        self.cnx = conexion
        self.cursor = self.cnx.cursor()
        self.padre = padre
        if padre is None :
            self.wnTipoDocumento.maximize()
            self.frm_padre = self.wnTipoDocumento
        else:
            self.frm_padre = padre.frm_padre
            
        self.crea_columnas()
        self.carga_datos()
        
    
    def crea_columnas(self):
        columnas = []
        columnas.append ([CODIGO, "Codigo", "str"])
        columnas.append ([DESCRIPCION, "Descripcion", "str"])
        
        self.modelo = gtk.ListStore(*(2*[str]))
        SimpleTree.GenColsByModel(self.modelo, columnas, self.treeTipoDocumento)
        
    def carga_datos(self):
        self.modelo = ifd.ListStoreFromSQL(self.cnx, strSelectTipoDocumento)
        self.treeTipoDocumento.set_model(self.modelo)

    def on_btnAnadir_clicked(self, btn=None, data=None):
        dlg = dlgTipoDocumento(self.cnx, self.frm_padre, False)
        dlg.editando=False
        response = dlg.dlgTipoDocumento.run()
        if response == gtk.RESPONSE_OK:
            self.carga_datos()
    
    def on_btnQuitar_clicked(self, btn=None):
        selection = self.treeTipoDocumento.get_selection()
        model, it = selection.get_selected()
        descripcion = model.get_value(it, DESCRIPCION)
        
        if dialogos.yesno("¿Desea eliminar el Documento <b>%s</b>?\nEsta acción no se puede deshacer\n" % descripcion, self.frm_padre) == gtk.RESPONSE_YES:
            llaves={'descripcion_tipo_documento':descripcion}
            sql = ifd.deleteFromDict('traza.tipo_documento', llaves)
            self.cursor.execute(sql, llaves)
            model.remove(it)
        
    def on_btnPropiedades_clicked(self, btn=None):

        model, it = self.treeTipoDocumento.get_selection().get_selected()
        if model is None or it is None:
            return
        dlg = dlgTipoDocumento(self.cnx, self.frm_padre, False)
        dlg.entCodigo.set_text(model.get_value(it, CODIGO))
        dlg.entDescripcion.set_text(model.get_value(it, DESCRIPCION))
        
        
        dlg.editando = True
        response = dlg.dlgTipoDocumento.run()
        if response == gtk.RESPONSE_OK:
            self.modelo.clear()
            self.carga_datos()
            
    def on_btnCerrar_clicked(self, btn=None):
        if self.padre is None:
            self.on_exit()
        else:
            self.padre.remove_tab("Tipo Documento")
            
    def on_treeTipoDocumento_row_activated(self, tree=None, path=None, col=None):
        self.on_btnPropiedades_clicked()


class dlgTipoDocumento(GladeConnect):
    def __init__(self, conexion=None, padre=None, editando=None):
        GladeConnect.__init__(self, "glade/wnTipoDocumento.glade", "dlgTipoDocumento")
        self.cnx = conexion
        self.cursor = self.cnx.cursor()
        self.entDescripcion.grab_focus()
        
        self.editando=editando
        self.codigo_tipo_ficha = None
        if self.editando:
            self.entCodigo.set_sensitive(False)
        self.dlgTipoDocumento.show()
    
    def on_btnAceptar_clicked(self, btn=None, date=None, cnx=None):
        if self.entDescripcion.get_text() == "":
            dialogos.error("El campo <b>Descripción de Tipo Documento</b> no puede estar vacío")
            return
        
        campos = {}
        llaves = {}
        campos['descripcion_tipo_documento']  = self.entDescripcion.get_text().upper()
        if not self.editando:
            sql = ifd.insertFromDict("traza.tipo_documento", campos)
            
        else:
            llaves['codigo_tipo_documento'] = self.entCodigo.get_text().upper()
            sql, campos=ifd.updateFromDict("traza.tipo_documento", campos, llaves)
            
        self.cursor.execute(sql, campos)
        self.dlgTipoDocumento.hide()
        
    def on_btnCancelar_clicked(self, btn=None):
        self.dlgTipoDocumento.hide()
        
if __name__ == '__main__':
    cnx = connect("dbname=traza")
    #cnx.autocommit()
    sys.excepthook = debugwindow.show
    d = wnTipoDocumento(cnx)
    
    gtk.main()
